# -*- coding:utf-8 -*-

__author__ = 'zhl'
"""
专题报表-龙虎榜-个股交易公开信息表
"""
from EmQuantAPI import *
from datetime import timedelta, datetime
import time as _time
import traceback
import pandas as pd

"""
创建Pandas DataFrame 数据结构
label=list()
dict={0:[],1:[]}
"""


def dict_convert_dataframe_append_toscv(file,dict,label,df):
   
    for k,v in dict.items():
        data = [v]  
        df = df.append(pd.DataFrame(data,index=[k],columns=label))
        df.to_csv(file,mode="a",header=False)
    return df

def dict_convert_dataframe(dict,label,df):
   
    for k,v in dict.items():
        data = [v]  
        df = df.append(pd.DataFrame(data,index=[k],columns=label))
    return df

def mainCallback(quantdata):
    """
    mainCallback 是主回调函数，可捕捉如下错误
    在start函数第三个参数位传入，该函数只有一个为c.EmQuantData类型的参数quantdata
    :param quantdata:c.EmQuantData
    :return:
    """
    print("mainCallback", str(quantdata))
    # 登录掉线或者 登陆数达到上线（即登录被踢下线） 这时所有的服务都会停止
    if str(quantdata.ErrorCode) == "10001011" or str(quantdata.ErrorCode) == "10001009":
        print("Your account is disconnect. You can force login automatically here if you need.")
    # 行情登录验证失败（每次连接行情服务器时需要登录验证）或者行情流量验证失败时，会取消所有订阅，用户需根据具体情况处理
    elif str(quantdata.ErrorCode) == "10001021" or str(quantdata.ErrorCode) == "10001022":
        print("Your all csq subscribe have stopped.")
    # 行情服务器断线自动重连连续6次失败（1分钟左右）不过重连尝试还会继续进行直到成功为止，遇到这种情况需要确认两边的网络状况
    elif str(quantdata.ErrorCode) == "10002009":
        print("Your all csq subscribe have stopped, reconnect 6 times fail.")
        # 行情订阅遇到一些错误(这些错误会导致重连，错误原因通过日志输出，统一转换成EQERR_QUOTE_RECONNECT在这里通知)，正自动重连并重新订阅,可以做个监控
    elif str(quantdata.ErrorCode) == "10002012":
        print("csq subscribe break on some error, reconnect and request automatically.")
        # 资讯服务器断线自动重连连续6次失败（1分钟左右）不过重连尝试还会继续进行直到成功为止，遇到这种情况需要确认两边的网络状况
    elif str(quantdata.ErrorCode) == "10002014":
        print("Your all cnq subscribe have stopped, reconnect 6 times fail.")
    # 资讯订阅遇到一些错误(这些错误会导致重连，错误原因通过日志输出，统一转换成EQERR_INFO_RECONNECT在这里通知)，正自动重连并重新订阅,可以做个监控
    elif str(quantdata.ErrorCode) == "10002013":
        print("cnq subscribe break on some error, reconnect and request automatically.")
    # 资讯登录验证失败（每次连接资讯服务器时需要登录验证）或者资讯流量验证失败时，会取消所有订阅，用户需根据具体情况处理
    elif str(quantdata.ErrorCode) == "10001024" or str(quantdata.ErrorCode) == "10001025":
        print("Your all cnq subscribe have stopped.")
    else:
        pass


def startCallback(message):
    print("[EmQuantAPI Python]", message)
    return 1


try:
    # 调用登录函数（激活后使用，不需要用户名密码）
    loginResult = c.start("ForceLogin=1", '', mainCallback)
    if(loginResult.ErrorCode != 0):
        print("login in fail")
        exit()
    print(" 获取专题报表-龙虎榜个股交易信息-2021年3月9日")
  
   
    startDate="2021-04-28"
    endDate="2021-04-28"
    file_prefix="winner_list_indivi_info"
    options="StartDate="+startDate+",EndDate="+endDate
    
    
    # 2021-03-09 21:37:55
    # 该表主要提供指定日期的交易异动汇总数据(异动股票、异动类型、成交合计等) 参数: 起始日期 截止日期 字段: 代码 名称 公告日期 异动类型 异动起始日 异动截止日 异动天数 期间成交量 期间成交额 期间涨跌幅 营业部买入合计_金额 营业部买入合计_占比 营业部卖出合计_金额 营业部卖出合计占比 营业部交易合计_金额 营业部交易合计_占比 营业部交易净买入合计_金额 营业部交易净买入合计_占比 证监会行业(2012) 东财行业 oldid
    data_res=c.ctr("StockInfo","SECURITYCODE,SECURITYSHORTNAME,TDATE,VCCHNAME,CSDATE,CEDATE,STADATE,NTRANSAC,TURNOVER,CHGRADIO,DEC_YINGMAIRU,DEC_YINGMAIRUBI,DEC_YINGMAICHU,DEC_YINGMAICHUBI,DEC_JIAOYI,DEC_JIAOYIZHANBI,DEC_JINBMONEY,DEC_JINBMONEYZHANBI,STR_PUBLISHNAMEZJH,STR_PUBLISHNAMEDC3,oldid"
            ,options)
    if(data_res.ErrorCode != 0):
        print("request ctr Error, ", data_res.ErrorMsg)
    else:
        print("ctr龙虎榜个股交易信息输出结果======分割线======")
        
        # 创建 DataFrame 结构数据
        label=data_res.Indicators
        # df=pd.DataFrame(columns=label)
        file=file_prefix+"-"+startDate+"_"+endDate+".csv"
        # df.to_csv(file)

        # pd_data=dict_convert_dataframe_append_toscv(file,data_res.Data,label,df)
        df2=pd.DataFrame()
        pd_data2=dict_convert_dataframe(data_res.Data,label,df2)
        pd_data2.to_csv(file)


except Exception as ee:
    print("error >>>", ee)
    traceback.print_exc()
else:
    print("获取专题报表-龙虎榜-个股交易信息表-end")

finally:
    # 退出
    data_shareholder = logoutResult = c.stop()
